package classes.shapes
{
	import classes.fillstyle.FillStyle;
	import classes.fillstyle.bitmap.BitmapFillStyle;
	import classes.fillstyle.gradient.GradientFillStyle;
	import classes.fillstyle.line.LineFillStyle;
	import classes.fillstyle.solid.SolidFillStyle;
	import flash.display.Sprite;
	
	public class BasicShape extends Sprite
	{
		protected var _lineStyle:FillStyle;
		protected var _fillStyle:FillStyle;
		
		public function BasicShape()
		{
			
		}
		
		public function set lineStyle(style:FillStyle):void
		{
			this._lineStyle = style;
			updateShape();
		}
		
		public function set fillStyle(style:FillStyle):void
		{
			this._fillStyle = style;
			updateShape();
		}
		
		public function get lineStyle():FillStyle
		{
			return _lineStyle;
		}
		
		public function get fillStyle():FillStyle
		{
			return _fillStyle;
		}
		
		protected function updateShape():void
		{
			
		}
		
		protected function setLineStyle(style:FillStyle):void
		{
			if(style is LineFillStyle)
			{
				this.graphics.lineStyle(LineFillStyle(style).thickness, LineFillStyle(style).color, LineFillStyle(style).alpha, LineFillStyle(style).pixelHinting, LineFillStyle(style).scaleMode, LineFillStyle(style).caps, LineFillStyle(style).joints, LineFillStyle(style).miterLimit);
			}
			else if(style is GradientFillStyle)
			{
				this.graphics.lineGradientStyle(GradientFillStyle(style).type, GradientFillStyle(style).colors, GradientFillStyle(style).alphas, GradientFillStyle(style).ratios, GradientFillStyle(style).matrix, GradientFillStyle(style).spreadMethod, GradientFillStyle(style).interpolationMethod, GradientFillStyle(style).focalPointRatio);
			}
			else if(style is BitmapFillStyle)
			{
				this.graphics.lineBitmapStyle(BitmapFillStyle(style).bitmap, BitmapFillStyle(style).matrix, BitmapFillStyle(style).repeat, BitmapFillStyle(style).smooth);
			}
		}
		
		protected function setFillStyle(style:FillStyle):void
		{
			if(style is SolidFillStyle)
			{
				this.graphics.beginFill(SolidFillStyle(style).color, SolidFillStyle(style).alpha);
			}
			else if(style is GradientFillStyle)
			{
				this.graphics.beginGradientFill(GradientFillStyle(style).type, GradientFillStyle(style).colors, GradientFillStyle(style).alphas, GradientFillStyle(style).ratios, GradientFillStyle(style).matrix, GradientFillStyle(style).spreadMethod, GradientFillStyle(style).interpolationMethod, GradientFillStyle(style).focalPointRatio);
			}
			else if(style is BitmapFillStyle)
			{
				this.graphics.beginBitmapFill(BitmapFillStyle(style).bitmap, BitmapFillStyle(style).matrix, BitmapFillStyle(style).repeat, BitmapFillStyle(style).smooth);
			}
		}
	}
}